package controlador;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.util.Collection;
import javax.swing.table.DefaultTableModel;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
import vista.Mensaje;
import vista.VentanaPrincipal;
import vista.VentanaReportes;
import modelo.Seccion;
import modelo.Estudiante;
import java.io.File;
import java.io.IOException;

public class EscuchadorVentanaReportes extends WindowAdapter implements ActionListener,ItemListener 
{
	private VentanaReportes referencia;
	private Seccion seccion;
	private Object[][] data;
    private Object[] encabezados= {"Cedula","Nombre","Apellido","Nota 1","Nota 2","Nota 3","Nota Final"};
    private ModeloTabla modeloTabla;
    private Collection<Estudiante> coleccion;
    private File archivo;
    private String tituloReporte,pieReporte;

	public EscuchadorVentanaReportes(VentanaReportes referencia,Seccion seccion)
	{
	    this.referencia= referencia;
	    this.seccion= seccion;

            archivo= new File("Archivo.txt");
            tituloReporte= "";
            pieReporte="";
           
        }
	
	private void cerrarVentana()
        {
          new VentanaPrincipal(seccion);
          this.referencia.setVisible(false);
          this.referencia.dispose();
        }

	
	public void windowClosing(WindowEvent ev)
	{
		cerrarVentana();
	}
	
	public void windowOpened(WindowEvent evt)
        {
            if (!seccion.isEvaluacionesAplicadas())
         	this.referencia.getCbOrden().setEnabled(false);

            coleccion= seccion.getEstudiantes();
            data= new Object[coleccion.size()][7];
            int i=0;
            for (Estudiante estudiante:coleccion)
            {
                  data[i][0]= estudiante.getCedula();
                  data[i][1]= estudiante.getNombre();
                  data[i][2]= estudiante.getApellido();
                  data[i][3]= estudiante.getNotas()[0];
                  data[i][4]= estudiante.getNotas()[1];
                  data[i][5]= estudiante.getNotas()[2];
                  data[i][6]= estudiante.getNotaFinal();
                  ++i;
             }

             modeloTabla= new ModeloTabla(data,encabezados);
             this.referencia.getReporteGenerado().setModel(modeloTabla);
            
             archivo= new File("EstudiantesOrdenadosCedula.txt");
             tituloReporte= "Reporte de Estudiantes Ordenados por Cedula";
             pieReporte="";
             
             if (coleccion.isEmpty())
            	 this.referencia.getBtnGuardar().setEnabled(false);
        }
	
	@Override
	public void itemStateChanged(ItemEvent e) 
	{
            if (e.getSource()==this.referencia.getCbOrden())
            {
                    if (this.referencia.getCbOrden().getSelectedIndex()==0)
                    {
                        coleccion= seccion.getEstudiantes();
                        data= new Object[coleccion.size()][7];
                        int i=0;
                        for (Estudiante estudiante:coleccion)
                        {
                          data[i][0]= estudiante.getCedula();
                          data[i][1]= estudiante.getNombre();
                          data[i][2]= estudiante.getApellido();
                          data[i][3]= estudiante.getNotas()[0];
                          data[i][4]= estudiante.getNotas()[1];
                          data[i][5]= estudiante.getNotas()[2];
                          data[i][6]= estudiante.getNotaFinal();
                          ++i;
                        }

                        modeloTabla= new ModeloTabla(data,encabezados);
                        this.referencia.getReporteGenerado().setModel(modeloTabla);

                        archivo= new File("EstudiantesOrdenadosCedula.txt");
                        tituloReporte= "Reporte de Estudiantes Ordenados por Cedula";
                        pieReporte="";
                    }
                    else if(this.referencia.getCbOrden().getSelectedIndex()==1)
                    {
                          coleccion= seccion.generarEstudianteNotaFinal();
                          data= new Object[coleccion.size()][7];
                          int i=0;

                          for (Estudiante estudiante:coleccion)
                          {
                           data[i][0]= estudiante.getCedula();
                           data[i][1]= estudiante.getNombre();
                           data[i][2]= estudiante.getApellido();
                           data[i][3]= estudiante.getNotas()[0];
                           data[i][4]= estudiante.getNotas()[1];
                           data[i][5]= estudiante.getNotas()[2];
                           data[i][6]= estudiante.getNotaFinal();
                           ++i;
                          }

                          modeloTabla= new ModeloTabla(data,encabezados);
                          this.referencia.getReporteGenerado().setModel(modeloTabla);

                          archivo= new File("EstudiantesOrdenadosNotaFinal.txt");
                          tituloReporte= "Reporte de Estudiantes Ordenados por Nota Final";
                          pieReporte="";
                    }
                    else if(this.referencia.getCbOrden().getSelectedIndex()==2)
                    {
                            coleccion= seccion.generarReporteEstudiantesAprobados();
                            data= new Object[coleccion.size()][7];
                            int i=0;
                            for (Estudiante estudiante:coleccion)
                            {
                              data[i][0]= estudiante.getCedula();
                              data[i][1]= estudiante.getNombre();
                              data[i][2]= estudiante.getApellido();
                              data[i][3]= estudiante.getNotas()[0];
                              data[i][4]= estudiante.getNotas()[1];
                              data[i][5]= estudiante.getNotas()[2];
                              data[i][6]= estudiante.getNotaFinal();
                              ++i;
                            }

                            modeloTabla= new ModeloTabla(data,encabezados);
                            this.referencia.getReporteGenerado().setModel(modeloTabla);

                            archivo= new File("EstudiantesAprobados.txt");
                            tituloReporte= "Reporte de Estudiantes Aprobados";
                            pieReporte="";
                    }
                    else if(this.referencia.getCbOrden().getSelectedIndex()==3)
                    {
                            coleccion= seccion.generarReporteEstudiantesAplazados();
                            data= new Object[coleccion.size()][7];
                            int i=0;
                            for (Estudiante estudiante:coleccion)
                            {
                               data[i][0]= estudiante.getCedula();
                               data[i][1]= estudiante.getNombre();
                               data[i][2]= estudiante.getApellido();
                               data[i][3]= estudiante.getNotas()[0];
                               data[i][4]= estudiante.getNotas()[1];
                               data[i][5]= estudiante.getNotas()[2];
                               data[i][6]= estudiante.getNotaFinal();
                               ++i;
                             }

                             modeloTabla= new ModeloTabla(data,encabezados);
                             this.referencia.getReporteGenerado().setModel(modeloTabla);

                             archivo= new File("EstudiantesAplazados.txt");
                             tituloReporte= "Reporte de Estudiantes Aplazados";
                             pieReporte="";
                    }
            }
	}

	@Override
	public void actionPerformed(ActionEvent e) 
	{
		if (e.getSource()==this.referencia.getBtnGuardar())
                {
                     JFileChooser fc= new JFileChooser();
	             fc.setFileFilter(new FileNameExtensionFilter(".txt","txt"));

                     fc.setSelectedFile(archivo);

                     if (fc.showSaveDialog(null)== JFileChooser.APPROVE_OPTION)
                     {
                         archivo = fc.getSelectedFile();

                         /*Para que siempre se coloque la extension .txt*/
                         if (!archivo.getAbsolutePath().contains(".txt"))
                            archivo= new File(archivo.getAbsolutePath() + ".txt");

                         try
                         {
                            if (archivo.exists())
                            {
                               if (Mensaje.mostrarConfirmacion("El Reporte ya Existe ¿Desea Sobreescribirlo?"))
                                  seccion.imprimirReporteArchivo(archivo, coleccion, tituloReporte, pieReporte);
                            }
                            else
                               seccion.imprimirReporteArchivo(archivo, coleccion, tituloReporte, pieReporte);

                         }
                         catch(IOException ex)
                         {
                            Mensaje.mostrarError("Error creando archivo");
                         }

                     }
                }
                else if (e.getSource()==this.referencia.getBtnSalir())
		{
			cerrarVentana();
		}
	}
	
	/*Para crear un modelo de tabla no editable*/
	
	private class ModeloTabla extends DefaultTableModel
	{


		public ModeloTabla(Object[][] data, Object[] columnNames) {
			super(data, columnNames);
			
		}

		
		
		public boolean isCellEditable(int row,int col)
		{
			return false;
		}
		
	}

}
